<template>
    <div>
        <el-upload
            drag
            :headers="headers"
            class="avatar-uploader"
            :action="action"
            :show-file-list="false"
            :on-success="handleAvatarSuccess"
            :before-upload="beforeAvatarUpload"
        >
            <img v-if="imageUrl" :src="imageUrl" class="avatar"/>

            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>
        <!--        其实组件是，前台页面显示效果。核心是通过input,传递到后台imageUrl的物理地址-->
        <input type="text" :name="name" v-model="imageUrl" hidden/>

    </div>
</template>

<script>
// <!--    @image 图片路径-->
// @name 上传后台接口的名字
    import draggable from 'vuedraggable';

    export default {

        props: {
            action: {default: '/common/upload'},
            name: {default: 'file'},
            image: {default: ''},

        },
        data() {
            return {
                imageUrl: this.image,
                headers: {"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content")},
            };
        },

        watch: {
            image(url) {

                this.imageUrl = url;
            }
        },
        methods: {
            handleAvatarSuccess(res, file) {
                this.imageUrl = res.path;
                this.$emit('update:image', this.imageUrl)
            },
            beforeAvatarUpload(file) {
                const isJPG = ["image/jpeg", "image/png"].some((t) => t === file.type);
                const isLt2M = file.size / 1024 / 1024 < 2;
                if (!isJPG) {
                    this.$message.error("上传头像图片只能是 JPG 格式!");
                }
                if (!isLt2M) {
                    this.$message.error("上传头像图片大小不能超过 2MB!");
                }
                return isJPG && isLt2M;
            },
        },
    };
</script>

<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        overflow: hidden;
    }

    .avatar-uploader .el-upload:hover {
        border-color: #409eff;
    }

    .el-upload-dragger {
        width: auto !important;
    }

    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 178px;
        height: 178px;
        line-height: 178px;
        text-align: center;
    }

    .avatar {
        /* width: 178px; */
        background: #777;
        height: 178px;
        display: block;
    }
</style>

